package cn.itcast.nems.oldems.dao.mapper;

import cn.itcast.nems.oldems.dao.dataobject.ContractInfoDO;
import cn.itcast.nems.oldems.dao.dataobject.StudentBelongerDO;
import cn.itcast.nems.oldems.dao.dataobject.StudentClazzInfoDO;
import cn.itcast.nems.oldems.dao.dataobject.StudentInfoDO;
import cn.itcast.nems.oldems.dao.entiry.Student;
import cn.itcast.nems.oldems.dao.query.StudentDataQuery;
import cn.itcast.nems.order.dao.dataobject.OrderRefundDO;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 学籍流转台账 Mapper 接口
 * </p>
 *
 * @author liyong
 * @since 2023-08-31
 */
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
    @InterceptorIgnore(tenantLine = "true")
    List<StudentBelongerDO> queryStudentBelongerByIds (@Param("studentIds") Set<Integer> studentIds ) ;
    /**
     * 根据学号查询学生信息
     * @param studentNos 学号，支持多个
     * @return 学生列表， 为空返回 null
     */
    @InterceptorIgnore(tenantLine = "true")
    List<StudentClazzInfoDO> queryClazzListByStudentNos (@Param("studentNos") Set<String> studentNos) ;

    /**
     * <p>
     * 根据学生ID查询学生信息
     * </p>
     *
     * @param studentIds 学员ID ，支持多个
     * @author zhouwei
     * @return 学生列表 ，为空返回  null
     * @since 2024/3/12 7:32 PM
     **/
    @InterceptorIgnore(tenantLine = "true")
    List<StudentInfoDO> queryStudentListByIds(@Param("studentIds") Set<Integer> studentIds ,String keyword) ;
    /**
     * 根据订单ID查询学员
     * @param orderId 订单ID  student_order.id
     * @return 学籍信息
     */
    @InterceptorIgnore(tenantLine = "true")
    Student findByOrderId(String orderId) ;

    IPage<Student> findPageData(Page<OrderRefundDO> page, @Param("query") StudentDataQuery query);

    List<Student> findPageData(@Param("query") StudentDataQuery query);

    int countAcademyCoupon(@Param("studentId") int studentId);

    void saveAcademyCoupon(
            @Param("studentId") Integer studentId,
            @Param("usedfee") boolean usedfee,
            @Param("createTime") Date createTime
    );

    int deleteAcademyCouponByStudentId(@Param("studentId") Integer studentId);

    /**
     * 根据学籍ID查询 学生详细
     * @param recordId 学籍ID
     * @return 学生详细
     */
    @InterceptorIgnore(tenantLine = "true")
    Student findByRecordId(@Param("recordId") String recordId) ;

    /**
     * 根据学员ID查询班级合同列表
     * @param studentId 学员ID
     * @param clazzId 班级ID
     * @param contractNumber 合同编号
     * @return 班级合同列表， 为空返回null
     */
    @InterceptorIgnore(tenantLine = "true")
    List<ContractInfoDO> findContractInfoByStudentIdAndClazzId(@Param("studentId") Integer studentId,
                                                               @Param("clazzId") Integer clazzId ,@Param("contractNumber") String contractNumber);

    /**
     * 根据学员ID获取班级签订详情
     * @param studentId 学员ID
     * @return 班级签订列表， 为空返回null
     */
    @InterceptorIgnore(tenantLine = "true")
    List<ContractInfoDO> findClassContractInfoByStudentId(@Param("studentId")Integer studentId) ;

    @InterceptorIgnore(tenantLine = "true")
    List<ContractInfoDO> findListByStudentIds(@Param("studentIds") Set<Integer> studentIds) ;



}
